package chain_of_responsibility_pattern;

/**
 * 处理请求的抽象类，定义了处理链中的基本结构和行为
 * @author 申书航
 * @version 1.0
 */
public abstract class RequestHandler {

    private final RequestHandler next;  // 下一个处理者

    /**
     * 构造函数，设置下一个处理者
     *
     * @param next 下一个请求处理者
     */
    protected RequestHandler(RequestHandler next) {
        this.next = next;
    }

    /**
     * 处理请求的方法，调用下一个处理者进行请求处理
     *
     * @param req 请求对象
     * @throws RuntimeException 如果已经到达链的末尾则抛出异常
     */
    public void handleRequest(Request req) {
        if (next == null) {
            throw new RuntimeException("已经到最后了，不能再处理了");
        }
        next.handleRequest(req);
    }

    /**
     * 获取处理者的名称
     *
     * @return 处理者的名称
     */
    public abstract String name();

    /**
     * 打印当前处理者处理请求的日志信息
     *
     * @param req 请求对象
     */
    public void printHandling(Request req) {
        System.out.println(name() + "，执行了“" + req.getRequestDescription() + "”命令");
    }
}
